﻿Imports Microsoft.Office.Interop

Public Class xtf_importarVehiculos
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub

    Dim dtt_archivo_ As DataTable

    Private Sub txt_carpeta_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_carpeta.ButtonClick
        Dim OFD As New FolderBrowserDialog
        If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            txt_carpeta.Text = OFD.SelectedPath
        End If
    End Sub

    Private Sub btn_iniciardetener_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_iniciardetener.Click
        If btn_iniciardetener.Text = "Cerrar" Then
            Me.Close()
        Else
            If System.IO.Directory.Exists(txt_carpeta.Text) Then
                btn_iniciardetener.Enabled = False
                dtt_archivo_.Rows.Clear()
                For Each file As String In System.IO.Directory.GetFiles(txt_carpeta.Text)
                    'If UCase(Strings.Right(file, 4)) = "XLSX" Then
                    Dim row As DataRow = dtt_archivo_.NewRow
                    row("Archivo") = Replace(file, txt_carpeta.Text & "\", "")
                    row("Estado") = "Pendiente"
                    row("Error") = ""
                    dtt_archivo_.Rows.Add(row)
                    'End If
                Next
                Dim xlApp As Excel.Application
                Dim xlWorkBook As Excel.Workbook
                Dim xlWorkSheet As Excel.Worksheet
                Dim xlDropDown1 As Excel.DropDown
                xlApp = New Excel.ApplicationClass
                gdv_general.SelectRow(0)
                gdc_general.Refresh()

                pgb_general.EditValue = 1
                pgb_general.Properties.Minimum = 1
                pgb_general.Properties.Maximum = dtt_archivo_.Rows.Count
                pgb_general.Refresh()
                For Each archivo As DataRow In dtt_archivo_.Rows
                    pgb_general.EditValue += 1
                    Dim vehiculo As New cls_vehiculo_
                    Dim telepeaje As New cls_telepeaje_
                    Try
                        xlWorkBook = xlApp.Workbooks.Open(txt_carpeta.Text & "\" & archivo("Archivo"))
                        xlWorkSheet = xlWorkBook.Sheets("Vehículo")

                        For j As Integer = 1 To xlWorkSheet.DropDowns.count
                            Try
                                xlDropDown1 = xlWorkSheet.DropDowns(j) 'DirectCast(xlWorkSheet.DropDowns("Drop Down " & j.ToString()), Excel.DropDown)
                                Dim selectedText As String = xlDropDown1.List(xlDropDown1.ListIndex) 'xlDropDown1.get_List(xlDropDown1.ListIndex).ToString()

                                Select Case j
                                    Case 1
                                        vehiculo.idpersonal = Split(selectedText, "|")(0)
                                    Case 4
                                        vehiculo.idcentrocostoorden = Split(selectedText, "|")(0)
                                    Case 5
                                        vehiculo.idvehiculotipo = Split(selectedText, "|")(0)
                                    Case 6
                                        vehiculo.idmarca = Split(selectedText, "|")(0)
                                    Case 7
                                        vehiculo.idmodelo = Split(selectedText, "|")(0)
                                    Case 8
                                        vehiculo.idcolor = Split(selectedText, "|")(0)
                                    Case 9
                                        vehiculo.año = selectedText
                                End Select
                            Catch ex As Exception
                            End Try
                        Next
                        vehiculo.patente = xlWorkSheet.Cells(26, 4).Value
                        vehiculo.inventario = xlWorkSheet.Cells(33, 4).Value

                        telepeaje.interno = xlWorkSheet.Cells(33, 4).Value
                        telepeaje.sitch = xlWorkSheet.Cells(35, 4).Value
                        telepeaje.observaciones = xlWorkSheet.Cells(37, 4).Value

                        'xlWorkBook = xlApp.Workbooks.Add(misValue)


                        If vehiculo.idpersonal = 0 Or vehiculo.idcentrocostoorden = 0 Or vehiculo.idvehiculotipo = 0 Or vehiculo.idmarca = 0 Or vehiculo.idmodelo = 0 Or vehiculo.idcolor = 0 Or vehiculo.año = 0 Or vehiculo.patente = "" Or telepeaje.sitch = "" Or telepeaje.interno = "" Then
                            archivo("Estado") = "Error"
                            archivo("Error") = "Datos incompletos"
                        Else

                            If Not vehiculo.BuscarXpatente(vehiculo.patente) Then
                                vehiculo.Nuevo(True)
                                telepeaje.idvehiculo = vehiculo.idvehiculo
                                telepeaje.Nuevo()
                                archivo("Estado") = "Procesado"
                            Else
                                archivo("Estado") = "Error"
                                archivo("Error") = "Duplicado"
                            End If
                        End If
                    Catch ex As Exception
                        archivo("Estado") = "Error"
                        archivo("Error") = "Archivo incompatible"
                    End Try
                    gdv_general.MoveNext()
                    gdc_general.Refresh()
                    pgb_general.Refresh()
                    xlWorkBook.Close()

                    Select Case archivo("Error")
                        Case ""
                            If Not System.IO.Directory.Exists(carpetaProcesadosCorrectamente) Then
                                ErrManagerShow("001032", Me)
                                Me.Close()
                            End If
                            Dim nombre As String = Strings.Left(archivo("Archivo"), Len(archivo("Archivo")) - 1 - Len(Split(archivo("Archivo"), ".")(Split(archivo("Archivo"), ".").Length - 1)))
                            If Len(nombre) >= Len(" yyyy-MM-dd HH.mm.ss") Then
                                Dim fecha As String = Strings.Right(nombre, Len(" yyyy-MM-dd HH.mm.ss"))
                                If Split(fecha, "-").Length = 5 And Split(fecha, "_").Length = 2 Then
                                    nombre = Strings.Left(nombre, Len(nombre) - Len(fecha))
                                End If
                            End If
                            If System.IO.File.Exists(carpetaProcesadosCorrectamente & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx") Then nombre &= Now.Millisecond
                            System.IO.File.Move(txt_carpeta.Text & "\" & archivo("Archivo"), carpetaProcesadosCorrectamente & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx")
                        Case "Archivo incompatible"
                            If Not System.IO.Directory.Exists(carpetaFormatoNOValido) Then
                                ErrManagerShow("001032", Me)
                                Me.Close()
                            End If
                            Dim nombre As String = Strings.Left(archivo("Archivo"), Len(archivo("Archivo")) - 1 - Len(Split(archivo("Archivo"), ".")(Split(archivo("Archivo"), ".").Length - 1)))
                            Dim extension As String
                            Try
                                extension = Split(archivo("Archivo"), ".")(Split(archivo("Archivo"), ".").Length - 1)
                            Catch ex As Exception
                                extension = ""
                            End Try


                            If Len(nombre) >= Len(" yyyy-MM-dd HH.mm.ss") Then
                                Dim fecha As String = Strings.Right(nombre, Len(" yyyy-MM-dd HH.mm.ss"))
                                If Split(fecha, "-").Length = 5 And Split(fecha, "_").Length = 2 Then
                                    nombre = Strings.Left(nombre, Len(nombre) - Len(fecha))
                                End If
                            End If
                            If System.IO.File.Exists(carpetaProcesadosCorrectamente & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & "." & extension) Then nombre &= Now.Millisecond
                            System.IO.File.Move(txt_carpeta.Text & "\" & archivo("Archivo"), carpetaFormatoNOValido & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & "." & extension)
                        Case "Duplicado"
                            If Not System.IO.Directory.Exists(carpetaProcesadosProblemas) Then
                                ErrManagerShow("001032", Me)
                                Me.Close()
                            End If
                            Dim nombre As String = Strings.Left(archivo("Archivo"), Len(archivo("Archivo")) - 1 - Len(Split(archivo("Archivo"), ".")(Split(archivo("Archivo"), ".").Length - 1)))
                            If Len(nombre) >= Len(" yyyy-MM-dd HH.mm.ss") Then
                                Dim fecha As String = Strings.Right(nombre, Len(" yyyy-MM-dd HH.mm.ss"))
                                If Split(fecha, "-").Length = 5 And Split(fecha, "_").Length = 2 Then
                                    nombre = Strings.Left(nombre, Len(nombre) - Len(fecha))
                                End If
                            End If
                            If System.IO.File.Exists(carpetaProcesadosCorrectamente & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx") Then nombre &= Now.Millisecond
                            System.IO.File.Move(txt_carpeta.Text & "\" & archivo("Archivo"), carpetaProcesadosProblemas & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx")
                        Case "Datos incompletos"
                            If Not System.IO.Directory.Exists(carpetaProcesadosProblemas) Then
                                ErrManagerShow("001032", Me)
                                Me.Close()
                            End If
                            Dim nombre As String = Strings.Left(archivo("Archivo"), Len(archivo("Archivo")) - 1 - Len(Split(archivo("Archivo"), ".")(Split(archivo("Archivo"), ".").Length - 1)))
                            If Len(nombre) >= Len(" yyyy-MM-dd HH.mm.ss") Then
                                Dim fecha As String = Strings.Right(nombre, Len(" yyyy-MM-dd HH.mm.ss"))
                                If Split(fecha, "-").Length = 5 And Split(fecha, "_").Length = 2 Then
                                    nombre = Strings.Left(nombre, Len(nombre) - Len(fecha))
                                End If
                            End If
                            If System.IO.File.Exists(carpetaProcesadosCorrectamente & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx") Then nombre &= Now.Millisecond
                            System.IO.File.Move(txt_carpeta.Text & "\" & archivo("Archivo"), carpetaProcesadosProblemas & "\" & nombre & Format(Now, " yyyy-MM-dd HH.mm.ss") & ".xlsx")
                    End Select
                Next
                releaseObject(xlWorkBook)
                releaseObject(xlWorkSheet)
                releaseObject(xlDropDown1)
                xlApp.Quit()
                releaseObject(xlApp)
                btn_iniciardetener.Enabled = True
                btn_iniciardetener.Text = "Cerrar"
                If dtt_archivo_.Rows.Count = 0 Then
                    ErrManagerShow("001031", Me)
                End If
            Else
                ErrManagerShow("001032", Me)
            End If
        End If
    End Sub

    Public Sub New()
        ' This call is required by the designer.
        InitializeComponent()
        dtt_archivo_ = New DataTable
        dtt_archivo_.Columns.Add("Archivo", GetType(String))
        dtt_archivo_.Columns.Add("Estado", GetType(String))
        dtt_archivo_.Columns.Add("Error", GetType(String))
        gdc_general.DataSource = dtt_archivo_
        gdv_general.PopulateColumns()
        ' Add any initialization after the InitializeComponent() call.
    End Sub

    Private Sub txt_carpeta_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_carpeta.EditValueChanged
        btn_iniciardetener.Enabled = True
        btn_iniciardetener.Text = "Iniciar actualización"
    End Sub
    Dim carpetaAProcesar As String
    Dim carpetaProcesadosCorrectamente As String
    Dim carpetaFormatoNOValido As String
    Dim carpetaProcesadosProblemas As String

    Private Sub xtf_importarVehiculos_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
        Dim config_parametros As New cls_config_parametro_
        carpetaAProcesar = config_parametros.Buscar("carpetaAProcesar").valor
        carpetaProcesadosCorrectamente = config_parametros.Buscar("carpetaProcesadosCorrectamente").valor
        carpetaFormatoNOValido = config_parametros.Buscar("carpetaFormatoNOValido").valor
        carpetaProcesadosProblemas = config_parametros.Buscar("carpetaProcesadosProblemas").valor
        If carpetaAProcesar = "" Or carpetaProcesadosCorrectamente = "" Or carpetaFormatoNOValido = "" Or carpetaProcesadosProblemas = "" Then
            ErrManagerShow("001032", Me)
            Me.Close()
        Else
            If Not System.IO.Directory.Exists(carpetaProcesadosCorrectamente) Then
                ErrManagerShow("001032", Me)
                Me.Close()
                Exit Sub
            End If
            If Not System.IO.Directory.Exists(carpetaFormatoNOValido) Then
                ErrManagerShow("001032", Me)
                Me.Close()
                Exit Sub
            End If
            If Not System.IO.Directory.Exists(carpetaProcesadosProblemas) Then
                ErrManagerShow("001032", Me)
                Me.Close()
                Exit Sub
            End If
            If Not System.IO.Directory.Exists(carpetaProcesadosProblemas) Then
                ErrManagerShow("001032", Me)
                Me.Close()
                Exit Sub
            End If
            txt_carpeta.Text = carpetaAProcesar
        End If
    End Sub
End Class